package lambda;

/**
 * 不同情况的Lambda表达式使用
 */
public class LambdaUsage {
    public static void main(String[] args) {
        // 括号中是参数，没有不写，后面是代码体，只有一行时可以省略不写花括号
        NonReturnNonParameter i1 = () -> System.out.println("test1");
        i1.test1();

        // 如果方法体中仅有return语句则可以省略return关键字直接写返回值
        HasReturnNonParameter i2 = () -> 10;
        System.out.println(i2.test2());

        // 一个写参数类型，就得都写，要么都不写
        NonReturnHasParameter i3 = (String name, int age) -> {
            age ++;
            System.out.println(name + " " + age);
        };
        i3.test3("uu", 10);

        HasReturnHasParameter i4 = (name, age) -> {
            age += 2;
            System.out.println(name + " " + age);
            return age;
        };
        System.out.println(i4.test4("pp", 6));
    }
}

/**
 * 无返回值无参数的接口
 */
interface NonReturnNonParameter {
    void test1();
}

/**
 * 有返回值无参数的接口
 */
interface HasReturnNonParameter {
    int test2();
}

/**
 * 无返回值有参数的接口
 */
interface NonReturnHasParameter {
    void test3(String name, int age);
}

/**
 * 有返回值有参数的接口
 */
interface HasReturnHasParameter {
    int test4(String name, int age);
}